﻿namespace CTP.CRM.Core.Language
{
    //
    // 摘要:
    //     语言转换属性
    [AttributeUsage(AttributeTargets.Property)]
    public class MasterDataLanguageAttribute : Attribute
    {
        //
        // 摘要:
        //     是否动态枚举属性，只对枚举表数据有效（为true时取数据的EnumProperty配置字段值）
        public bool IsDynamicEnumProperty = false;

        //
        // 摘要:
        //     是否语言关键字模式
        public bool IsLanguageKeyMode = false;

        //
        // 摘要:
        //     表名
        public string TableName { get; set; } = string.Empty;


        //
        // 摘要:
        //     主键id字段名
        public string PrimaryKeyName { get; set; } = string.Empty;


        //
        // 摘要:
        //     标识字段名，空值时使用属性名
        public string? FieldName { get; set; }

        //
        // 摘要:
        //     枚举属性，只对枚举表数据有效（IsDynamicEnumProperty为true时取数据的EnumProperty配置字段值）
        public string? EnumProperty { get; set; }

        //
        // 摘要:
        //     是否位运算，只对枚举表数据有效
        public bool IsBitOperation { get; set; } = false;


        //
        // 摘要:
        //     项目配置-项目编码，只对关键字模式有效
        public string LanguageProjectCode { get; set; } = string.Empty;


        //
        // 摘要:
        //     语言转换属性
        public MasterDataLanguageAttribute()
        {
        }

        //
        // 摘要:
        //     语言转换属性
        //
        // 参数:
        //   tableName:
        //     表名
        //
        //   primaryKeyName:
        //     主键id字段名
        //
        //   fieldName:
        //     标识字段名，空值时使用属性名
        //
        //   enumProperty:
        //     枚举属性，只对枚举表数据有效
        //
        //   isBitOperation:
        //     是否位运算，只对枚举表数据有效
        //
        //   isDynamicEnumProperty:
        //     是否动态枚举属性，只对枚举表数据有效（为true时以数据的EnumProperty配置字段为准）
        public MasterDataLanguageAttribute(string tableName, string primaryKeyName, string? fieldName = null, string? enumProperty = null, bool isBitOperation = false, bool isDynamicEnumProperty = false)
        {
            TableName = tableName;
            PrimaryKeyName = primaryKeyName;
            FieldName = fieldName;
            EnumProperty = enumProperty;
            IsBitOperation = isBitOperation;
            IsDynamicEnumProperty = isDynamicEnumProperty;
        }

        //
        // 摘要:
        //     语言转换属性
        //
        // 参数:
        //   isLanguageKeyMode:
        //     是否语言关键字模式
        //
        //   languageProjectCode:
        //     项目配置-项目编码
        public MasterDataLanguageAttribute(bool isLanguageKeyMode, string languageProjectCode)
        {
            IsLanguageKeyMode = isLanguageKeyMode;
            LanguageProjectCode = languageProjectCode;
        }
    }
}
